package 纯数组;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class No974和可被K整除的子数组 {

    /**
     * 给定一个整数数组 A，返回其中元素之和可被 K 整除的（连续、非空）子数组的数目。
     *
     * 示例：
     * 输入：A = [4,5,0,-2,-3,1], K = 5
     * 输出：7
     * 解释：
     * 有 7 个子数组满足其元素之和可被 K = 5 整除：
     * [4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]
     *  
     * 提示：
     * 1 <= A.length <= 30000
     * -10000 <= A[i] <= 10000
     * 2 <= K <= 10000
     */

    public int subarraysDivByK(int[] A, int K) {

        Map<Integer,Integer> map=new HashMap<>();
        int sum=0;
        int result=0;
        map.put(0,1);

        for (int i = 0; i < A.length; i++) {
            sum+=A[i];

            int modulus =Math.floorMod(sum,K);
            if(map.containsKey(modulus )){
                result+=map.get(modulus) ;
            }

            map.put(modulus ,map.getOrDefault(modulus ,0)+1);
        }

        return result;
    }

    public static void main(String[] args) {
        No974和可被K整除的子数组 n=new No974和可被K整除的子数组();
        int[] arr={4,5,0,-2,-3,1};
        int result = n.subarraysDivByK(arr, 5);
        System.out.println(result);

        System.out.println(-2%6);
        System.out.println(Math.floorMod(-2,6));
    }

}
